/*3. 结构体数组的排序与输出：定义一个结构体数组（存储 3 个学生信息：学号、姓名、分数），输入数据后按分数从高到低排序并输出。*/
#include<stdio.h>
#include<string.h>

struct Student{
    int id;
    char name[50];
    float score;
    char gender[4];  // 存储"F"或"M"，长度4足够（含结束符'\0'）
};

int main(){
    struct Student stu[3] = {
        {1001, "Alice", 95.5, "F"},
        {1002, "Bob", 89.0, "M"},
        {1003, "Charlie", 92.0, "M"}
    };

    // 按分数从高到低排序（冒泡排序修正）
    for(int i = 0; i < 3; i++){
        for(int j = i + 1; j < 3; j++){
            // 若前一个分数低于后一个，交换（实现从高到低）
            if(stu[i].score < stu[j].score){
                struct Student temp = stu[i];  // 临时保存当前i的元素
                stu[i] = stu[j];
                stu[j] = temp;
            }
        }
    }

    // 输出结构体内容（修正格式符和参数）
    for(int i = 0; i < 3; i++){
        // 姓名用%s，补充gender的输出，分数用%f更合适（float类型）
        printf("Student %d: ID=%d, Name=%s, Score=%.1f, Gender=%s\n",
               i+1,  // 序号从1开始
            stu[i].id,
            stu[i].name,
            stu[i].score,
            stu[i].gender);
    }

    return 0;
}